package gestordeentidades.persistance.database;

/**
 * Trabalho DAS - 2014/2015
 * Conversor de Sqlite para class e vice-versa
 * @author a21210380, a21190325, a21210392
 */
public class Converter {
    /**
     * Convert uma class para o tipo de dados correspondente em sqlite
     * @param type
     * @return String, o tipo de dados em sqlite, null caso não exista correspondencia
     */
    public static SQLtype convertToSqlText(Class<?> type) {
        if(type == null) {
            throw new NullPointerException("Converter convertToSqlText type não pode ser null!");
        }

        if (type.isPrimitive()) {
            switch (type.getName()) {
                case "int":
                    return SQLtype.INTEGER;
                case "long":
                    return SQLtype.BIGINT;
                case "float":
                    return SQLtype.FLOAT;
                case "double":
                    return SQLtype.DOUBLE;
                case "boolean":
                    return SQLtype.BIT;
            }
        } else {
            switch (type.getName()) {
                case "java.lang.String":
                    return SQLtype.TEXT;
                case "java.sql.Date":
                    return SQLtype.DATE;
            }
        }
        return null;
    }

    /**
     * Convert o o tipo de dados em sqlite para a class correspondente
     * @param type
     * @return a class, null caso não exista correspondencia
     */
    public static Class convertFromSQLtype(SQLtype type) {
        if(type == null) {
            throw new NullPointerException("Converter convertFromSQLtype type não pode ser null!");
        }
        
        switch (type) {
            case INTEGER:
                return int.class;
            case BIGINT:
                return long.class;
            case FLOAT:
                return float.class;
            case DOUBLE:
                return double.class;
            case BIT:
                return boolean.class;
            case TEXT:
                return String.class;
            case DATE:
                return java.sql.Date.class;
        }
        return null;
    }
}
